﻿/* SCRIPTS COMEÇAM AQUI */


//
// Recupera e retorna a quantidade de alunos na base
//


function qtdeAlunosNaBaseLocal() {

    db.transaction(function (tx) {
        tx.executeSql("SELECT COUNT(*) as total FROM Aluno", [], function (tx, result) {
            return result.rows.item(0)['total']
        });
    });
}

// 
// Carrega todas as listas do Servidor e copia
// para uma copia local. Isso so funcionarão com 
// browsers que tiverem WebKit
// 
function allAlunosAllTurmas() {

    $.ajax({
        url: "http://" + serverConn + "/Services/Aluno.asmx/EnviaTodosOsAlunos",
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        data: "{}",
        type: "POST",
        success: function (alunos) {

            // Primeiro compara se a quantidade de alunos na base local
            // e igual ao número alunos recebidos pelo JSON, se for o mesmo
            // ele ignora a lista e utiliza a interna.

            if (alunos.d.length != qtdeAlunosNaBaseLocal())
                try {
                    $.each(alunos, function (index, listaAlunos) {
                        $.each(listaAlunos, function (index, aluno) {
                            qtdAlunosNoJSON = listaAlunos.length;
                            //console.log(listaAlunos.length);

                            db.transaction(function (tx) {
                                // Cada aluno novo recebe um registro na tabela Aluno
                                tx.executeSql("INSERT INTO Aluno (ID, NomePessoa, TurmaID) VALUES (?, ?, ?)",
						                [aluno.ID, aluno.NomePessoa, aluno.TurmaID],
						                function (result) {
						                });
                            });
                            db.transaction(function (tx) {

                                // Cada turma nova que e recebida pelo JSON dos alunos e incluído também
                                tx.executeSql("INSERT INTO Turma (TurmaID, TurmaCod) VALUES (?, ?)",
						                [aluno.TurmaID, aluno.TurmaCod],
						                function (result) {
						                });
                            });
                        }); //end $.each
                    }); // end $.each
                }
                //try e end if
				catch (err) {

                    // Mostramos o erro como um objeto na console do browser e um ícone e apresentado ao usuário
                    console.error(err);
                }
        },
        error: function (xhr, ajaxOptions, thrownError) {

            // Mostramos o erro com os seus trás objetos na console do 
            // browser e um ícone e apresentado ao usuário
            console.error(xhr);
            console.error("erro ao inserir na tabela aluno - " + ajaxOptions);
            console.error(thrownError);
        }

    });

}



// 
// Salva a presenca feita na GUI para a base local
// 
function RegistraPresencaLocal(ID) {
    db = openDatabase("HPGACN 1.2", "1.2", "Base para presenca dos alunos do Grupo Augusto Cezar Netto", 200000);
    d = new Date();
    var mes = d.getMonth();
    mes++;

    data = d.getFullYear() + "-"
			+ mes + "-"
			+ d.getDate() + " "
			+ d.getHours() + ":"
			+ d.getMinutes() + ":"
			+ d.getSeconds();

    if (db) {
        try {
            db.transaction(function (tx) {
                tx.executeSql("INSERT INTO Presenca (ID, data) VALUES (?, ?)",
					[ID, data],
					function (result) { });
            });

        } catch (err) {
            console.log(err);
        }
    }
}



// 
// Envia a lista de presencas feitas localmente para o servidor
// 

function EnviarArrayAlunos() {

    var jsonObj = '{"presencas": [';

    if (db) {
        db.transaction(function (tx) {


            tx.executeSql("SELECT ID, data FROM Presenca", [], function (tx, result) {
                for (var i = 0; i < result.rows.length; ++i) {
                    var row = result.rows.item(i);
                    jsonObj = jsonObj +
	            				"{" +
	            				'"ID": "' +
	            				row['ID'] + '", ' +
	            				'"dataPresenca": "' +
	            				row['data'] + '"';
                    if (i != result.rows.length - 1)
                        jsonObj = jsonObj + "},";
                    else
                        jsonObj = jsonObj + "}";
                }
                jsonObj = jsonObj + "]}";
                if (!result.rows.length) {
                    console.log('Não há nada no banco para ser enviado');
                }
                
                //
                // Envia o objeto JSON para o Web Service
                //
                if (result.rows.length) {
                    console.log("Olha as presenças que foram enviadas para o servidor: " + jsonObj);
                    $.ajax({
                        type: 'POST',
                        url: "http://"+ serverConn +"/Services/Presenca.asmx/EnviaPresencas",
                        data: jsonObj,
                        contentType: "application/json;charset=utf-8",
                        dataType: "json",
                        success: function (result) {
                            if (result.d) {
                                db.transaction(function (tx) {
                                    tx.executeSql("DELETE FROM Presenca", [], function (tx, result) { });
                                    console.log("Sucesso ao limpar a tabela [Presenca] na base de dados local");
                                }, function (tx, error) {
                                    console.error("Falha ao limpar a tabela [Presenca] na base de dados local");
                                    console.error(tx);
                                    console.error(error)
                                });
                            }
                            else {
                                console.log(result);
                            }
                        },
                        error: function (xhr, a, b) {
                            console.error("Nao consegui enviar dados para o servidor - " + a);
                            console.error(xhr);
                            console.error(b);
                        }
                    });
                }

            }, function (tx, error) { // funcao de erro da transacao
                alert('Erro ao recuperar dados do banco local para enviar ao servidor - ' + error.message);
                jsonObj = null;
            });
        });
    }
}



//
// Chama o WebService que retorna um número de alunos
// baseado na string que e passada
//
// Obs: se a string tiver alguma %, a proc nao coloca % atomaticamente
//
//

function PesquisaAlunos(nomeAluno) {

    $.ajax({
        url: "../Services/Aluno.asmx/EnviaTodosOsAlunos",
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        data: "{}",
        type: "POST",
        success: function (alunos) {
        },
        error: function (xhr, a, b) {
            console.error(xhr.responseText);
            console.error(xhr);
            console.error(a);
            console.error(b);
        }
    });
}


/* SCRIPTS TERMINAM AQUI */
